home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
Apps
/
ScreenSavers
/
BackSpaceViews
/
CharenderView.BackModule
/
CharenderView.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
6KB
|
261 lines
/***************************************************
**
** CharenderView.m
**
** By Brian Hobbs (brian@ny.shl.com)
**
** This is the main class of the bundle, sets
** up the defaults, environment, text string, and
** stuff. Everything but the code in the initFrame:
** method should be quite unsurprising.
**
** This code is public domain. Feel free to use
** it in any way you wish. I'd like to see any
** changes you make, tho.
**
** Kudos to Sam Streeper for the Teapot code, from
** which most of the BackSpace 3-D setup was "acquired".
**
****************************************************/
#import "CharenderView.h"
#define CHARENDERTEXTDEFAULT "CharenderText"
#define CHARENDERFONTDEFAULT "CharenderFont"
#define CHARENDERCOLORDEFAULT "CharenderColor"
#define CHARENDERSURFDEFAULT "CharenderSurf"
#define CHARENDERRESDEFAULT "CharenderRes"
@implementation CharenderView
+ initialize
{
static NXDefaultsVector CharenderDefaults={
{CHARENDERTEXTDEFAULT,"Darkninja"},
{CHARENDERFONTDEFAULT,"Helvetica"},
{CHARENDERCOLORDEFAULT,"1.0 1.0 1.0"},
{CHARENDERSURFDEFAULT,"2"},
{CHARENDERRESDEFAULT,"30"},
{NULL}};
NXRegisterDefaults([NXApp appName], CharenderDefaults);
return [super initialize];
}
- initFrame:(const NXRect *) theRect
{
// camera position points
RtPoint fromP = {0,0,-5.0}, toP = {0,0,0};
// light position points
RtPoint lFromP = {30,20,-20};
RtPoint lFromP2 = {-10,10,-10};
RtPoint lFromP3 = {0,-10,-10};
// the various 3Dkit object id''s that we will initialize here
id ambientLight;
id aLight;
[super initFrame:theRect];
// retrieve defaults
[self getDefaults];
[self inspector:(BSThinker())];
[self setEyeAt:fromP toward:toP roll:0.0];
theShader=[[N3DShader alloc] init];
[theShader setUseColor:YES];
[theShader setColor:colorDefault];
[(N3DShader *)theShader setShader:"plastic"];
textShape= (DN3DString *)[[DN3DString alloc] init];
[textShape setTextFont:fontDefault];
[textShape setTextString:textDefault];
textBox = [[N3DShape alloc] init];
[textShape setShader:theShader];
// [[self setWorldShape:textShape] free];
[[self worldShape] linkDescendant:textBox];
[textBox linkDescendant:textShape];
ambientLight=[[N3DLight alloc] init];
[ambientLight makeAmbientWithIntensity:0.1];
[self addLight:ambientLight];
aLight=[[N3DLight alloc] init];
[aLight makeDistantFrom:lFromP to:toP intensity:0.2];
[self addLight:aLight];
aLight=[[N3DLight alloc] init];
[aLight makeDistantFrom:lFromP2 to:toP intensity:0.9];
[self addLight:aLight];
aLight=[[N3DLight alloc] init];
[aLight makeDistantFrom:lFromP3 to:toP intensity:0.3];
[self addLight:aLight];
[self setSurfaceTypeForAll:surfaceTypeDefault chooseHider:YES];
dx = randBetween(.05, .2);
dy = randBetween(.05, .2);
dz = randBetween(.05, .2);
rotationAxis[0] = 0;
theta = 0;
return self;
}
#define PI 3.14159
- oneStep
{
RtMatrix m;
rotationAxis[1] = sin(theta);
rotationAxis[2] = cos(theta);
theta += (2.0 * PI / 180.0);
[textShape rotateAngle:5 axis:rotationAxis];
[textBox translate:dx :dy :dz];
[textBox getTransformMatrix:m];
// I can use these values directly only because string's box isn't rotated
if (m[3][0] < -1.5) dx = randBetween(.02, .1);
else if (m[3][0] > 1.5) dx = randBetween(-.02, -.1);
if (m[3][1] < -1.0) dy = randBetween(.02, .1);
else if (m[3][1] > 1.5) dy = randBetween(-.02, -.1);
if (m[3][2] < -2.25) dz = randBetween(.02, .1);
else if (m[3][2] > 4) dz = randBetween(-.02, -.1);
[self display];
return self;
}
- (BOOL) useBufferedWindow
{
return YES;
}
- (const char *)windowTitle
{ return "Charender";
}
- inspector:sender
{
char buf[MAXPATHLEN];
if (!inspectorPanel)
{
sprintf(buf,"%s/Charender.nib",[sender moduleDirectory:"Charender"]);
[NXApp loadNibFile:buf owner:self withNames:NO];
[stringField setStringValue:textDefault];
[stringField setFont:[Font newFont:fontDefault size:12.0]];
[colorWell setColor:colorDefault];
[surfaceMatrix selectCellAt:surfaceTypeDefault :0];
[resolutionTextField setIntValue:resolutionDefault];
[resolutionSlider setIntValue:resolutionDefault];
[inspectorPanel display];
NXPing();
}
return inspectorPanel;
}
- setStringAndFontFrom:sender
{
strcpy(textDefault, [sender stringValue]);
strcpy(fontDefault, [[sender font] name]);
[textShape setTextString:textDefault andFont:fontDefault];
NXWriteDefault([NXApp appName], CHARENDERTEXTDEFAULT, textDefault);
NXWriteDefault([NXApp appName], CHARENDERFONTDEFAULT, fontDefault);
[self display];
return self;
}
- setColorFrom:sender
{
float r,g,b;
char str[100];
colorDefault = [sender color];
[theShader setColor:colorDefault];
NXConvertColorToRGB(colorDefault, &r, &g, &b);
sprintf(str, "%5.3f %5.3f %5.3f", r, g, b );
NXWriteDefault([NXApp appName], CHARENDERCOLORDEFAULT, str);
[self display];
return self;
}
- setSurfaceTypeFrom:sender
{
char str[100];
surfaceTypeDefault = [sender selectedRow];
sprintf(str,"%d", surfaceTypeDefault);
NXWriteDefault([NXApp appName], CHARENDERSURFDEFAULT, str);
[self setSurfaceTypeForAll:surfaceTypeDefault chooseHider:YES];
[self display];
return self;
}
- setResolutionFrom:sender
{
char str[100];
resolutionDefault = [sender intValue];
sprintf(str,"%d", resolutionDefault);
NXWriteDefault([NXApp appName], CHARENDERRESDEFAULT, str);
[textShape setResolution:(float)resolutionDefault];
[resolutionTextField setIntValue:resolutionDefault];
[self display];
return self;
}
- getDefaults
{
const char *ptr;
float r, g, b;
textDefault = (char *)NXZoneMalloc([self zone], sizeof(char) * 80);
fontDefault = (char *)NXZoneMalloc([self zone], sizeof(char) * 80);
ptr = NXGetDefaultValue([NXApp appName], CHARENDERTEXTDEFAULT);
strcpy(textDefault, (char *)ptr);
ptr = NXGetDefaultValue([NXApp appName], CHARENDERFONTDEFAULT);
strcpy(fontDefault, (char *)ptr);
ptr = NXGetDefaultValue([NXApp appName], CHARENDERCOLORDEFAULT);
sscanf (ptr, "%f %f %f", &r, &g, &b );
colorDefault = NXConvertRGBToColor(r,g,b);
surfaceTypeDefault = atoi(NXGetDefaultValue([NXApp appName], CHARENDERSURFDEFAULT));
resolutionDefault = atoi(NXGetDefaultValue([NXApp appName], CHARENDERRESDEFAULT));
return self;
}
@end